1. Field of the Invention
This invention relates to computer systems and, more particularly, to the storage systems employing block virtualization.
2. Description of the Related Art
Many business organizations and governmental entities rely upon applications that access large amounts of data, often exceeding a terabyte or more of data, for mission-critical applications. Often such data is stored on many different storage devices, which may be centrally located or distributed throughout an enterprise. Such storage devices may be heterogeneous in nature, including many different types of devices from many different manufacturers.
Configuring individual applications that consume data, or application server systems that host such applications, to recognize and directly interact with each different storage device that may possibly be encountered in a heterogeneous storage environment would be increasingly difficult as the environment scaled in size and complexity. Therefore, in some storage environments, specialized storage management software and hardware may be used to provide a more uniform storage model to storage consumers. Such software and hardware may also be configured to present physical storage devices as virtual storage devices (e.g., logical volumes) to storage consumers, and to add storage features not present in individual storage devices to the storage model. For example, features to increase fault tolerance, such as data mirroring, snapshot/fixed image creation, or data parity, as well as features to increase data access performance, such as disk striping, may be implemented in the storage model via hardware or software. The added storage features may be referred to as storage virtualization features.
In some storage environments, multiple devices or servers may cooperate in providing storage virtualization features associated with a certain set of physical storage devices, and in providing access to a virtual storage device aggregated from the physical storage devices. Such cooperating devices or servers may be termed “virtualization participants”. Depending on the types of operations being performed, virtualization participants may be grouped into different layers. For example, in a block virtualization environment, a front-end layer of virtualization participants, which may be termed “volume clients”, may provide an interface for interactions with storage consumers or applications wishing to utilize the virtualization features associated with logical volumes. A back-end layer of virtualization participants, which may be termed “storage servers”, may provide access to the backing physical storage devices corresponding to the logical volume. In some environments, logical volumes with a complex internal structure may be supported, where a given virtualization participant may typically have access to (or information about) only a portion of a particular logical volume.
In these types of storage environments, a virtualization participant at a given layer may need to communicate with one or more virtualization participants at the same layer or at a different layer, in order to provide a response to a storage request (e.g., a read request or a write request) from a storage consumer, or to perform an internally generated virtualization function such as recovery from a failure. Such communications may require an identification of a targeted block of the logical volume, where for example an I/O operation may need to be performed. As the number of virtualization participants that may cooperate in performing storage operations increases, and as the complexity of supported virtualization functions increases, a simple and uniform addressing scheme to identify targeted blocks in such communications between different virtualization participants may become increasingly desirable.